/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controladores;

import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import modelo.Categoria;
import modelo.Usuario;
import negocio.CategoriaBI;
import negocio.UsuarioBI;

/**
 *
 * @author Francisco
 */
@ManagedBean(name="crearCatCtrl")
@RequestScoped
public class CrearCategoriasCtrl implements Serializable{
    private static final long serialVersionUID=1L;
    
    private String nombreCategoria;
    private String descripcion;
    private Integer categoriaPadre;
    private Map<String,Integer> categorias;
    @Inject
    private CategoriaBI categoriaBI;
    @Inject
    private UsuarioBI usuarioBI;
    
    private LoginCtrl login;
    
    private Usuario usuario;
    
    @PostConstruct
    public void cargaCategorias(){
        try{
            login = (LoginCtrl)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("login");
            String nombreUsuario = login.getUsuario();
            usuario = usuarioBI.buscarUsuario(nombreUsuario);
        }catch(Exception e){
            FacesContext.getCurrentInstance()
                    .addMessage(null, 
                        new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", e.getMessage()));
            return;
        }
        try{
            if(usuario!=null){
                List<Categoria> categoriasUsu = categoriaBI.categoriasActivasPorUsuario(usuario.getIdUsuario());
                if(categoriasUsu.size()>0){
                    categorias = new HashMap<String, Integer>();
                    for (Categoria categoria : categoriasUsu) {
                        categorias.put(categoria.getNombre(), categoria.getIdCategoria());
                    }
                }
            }else{
                throw new Exception("No hay usuario");
            }
        }catch(Exception e){
            FacesContext.getCurrentInstance()
                    .addMessage(null, 
                        new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", e.getMessage()));
        }
                    
    }
    
    public void cancelar(){
        nombreCategoria = null;
        descripcion = null;
        categoriaPadre = null;
    }
    
    public void guardar(){
        try{
            Categoria catAnt = categoriaBI.buscarCategoria(nombreCategoria, usuario.getIdUsuario());
            if(catAnt!=null){
                throw new Exception("El nombre de categoria ya existe");
            }
            
            Categoria categoria = new Categoria();
            categoria.setNombre(nombreCategoria);
            categoria.setDescripcion(descripcion);
            categoria.setIdUsuario(usuario);
            categoria.setEstatus("A");
            categoriaBI.crear(categoria, categoriaPadre);
            nombreCategoria = null;
            descripcion = null;
            categoriaPadre = null;
            FacesContext.getCurrentInstance()
                    .addMessage(null, 
                        new FacesMessage(FacesMessage.SEVERITY_INFO, "Listo", "Guardado con éxito"));
        }catch(Exception e){
            FacesContext.getCurrentInstance()
                    .addMessage(null, 
                        new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", e.getMessage()));
        }
    }

    public String getNombreCategoria() {
        return nombreCategoria;
    }

    public void setNombreCategoria(String nombreCategoria) {
        this.nombreCategoria = nombreCategoria;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public Integer getCategoriaPadre() {
        return categoriaPadre;
    }

    public void setCategoriaPadre(Integer categoriaPadre) {
        this.categoriaPadre = categoriaPadre;
    }

    public Map<String, Integer> getCategorias() {
        return categorias;
    }

    public void setCategorias(Map<String, Integer> categorias) {
        this.categorias = categorias;
    }

    public LoginCtrl getLogin() {
        return login;
    }

    public void setLogin(LoginCtrl login) {
        this.login = login;
    }
    
}
